package com.example.demokotlin

import org.junit.Test

/**
 * <pre>
 * author : zhouronghua
 * e-mail : zhouronghua01@dreamxr.com
 * time : 2023/04/07
 * desc :
 * version: 1.0
 * </pre>
 */
class KtBase70 {

    /**
     * get和set是隐式函数，不用手动实现
     */
    var name = "小明"
        get() = field
        set(value) {
            field = value
        }

    /**
     * number 不能给值。get函数覆盖了默认的get方法，相当于field失效了。
     * 编译后number成员不存在了，直接使用getNumber()方法返回一个数值
     */
    val number: Int
        get() = (1..1000).shuffled().first() // 拿到一个随机值，返回给 getNumber()函数

    var info: String? = ""
    // 防范竞态条件：当你使用成员时，这个成员可能为null(可能为空值)，就必须采用 防范竞态条件，这个是KT编程规范化
    fun getShowInfo(): String {
        // 这种写法，就属于防范竞态条件，我们可以看到专业的KT开发者，有大量这种代码
        return info?.also {
            "最终info的结果是：$it"
        } ?: "info你原来是null, 请检查代码"
    }
}


@Test
fun testField() {
    println(KtBase70().name)
}